﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using Galaktika.BI.Charting;

namespace Galaktika.BI.Addin.VisifireChart.Runtime.PivotChart
{
    public class BubbleSeriesProperties
    {
        public BubbleSeriesProperties()
        {
            m_InternalUpdating = true;

            //Устанавливаем настройки по-умолчанию
            SetDefaultSettings();

            m_InternalUpdating = false;
        }

        /// <summary>
        /// Устанавливает настройки по-умолчанию
        /// </summary>
        public void SetDefaultSettings()
        {
            ABackColor = Colors.White;
            ASymbolScaleType = SymbolScaleType.XAxisScale;
            AMaxRadius = 100;
            AOpacity = 1;
        }

        /// <summary>
        /// Флаг внутреннего обновления значений. 
        /// </summary>
        protected bool m_InternalUpdating;

        public delegate void EventHandler(object sender, EventArgs e);
        /// <summary>
        /// Событие - произошло изменение свойств
        /// </summary>
        public event EventHandler PropertyChanged;

        protected void RaisePropertyChanged()
        {
            //В случае внутреннего обновления значений событие не генерируем
            if (m_InternalUpdating)
                return;

            EventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, EventArgs.Empty);
        }

        #region Свойства для Bubble - серии
        private Color m_BackColor;
        /// <summary>
        /// Цвет серии
        /// </summary>
        public Color ABackColor
        {
            get
            {
                return m_BackColor;
            }
            set
            {
                m_BackColor = value;
                RaisePropertyChanged();
            }
        }

        private SymbolScaleType m_SymbolScaleType;
        /// <summary>
        /// Тип вычисления размеров символа
        /// </summary>
        public SymbolScaleType ASymbolScaleType
        {
            get
            {
                return m_SymbolScaleType;
            }
            set
            {
                m_SymbolScaleType = value;
                RaisePropertyChanged();
            }
        }

        private int m_MaxRadius;
        /// <summary>
        /// Максимальный радиус - для режима PixelScale
        /// </summary>
        public int AMaxRadius
        {
            get
            {
                return m_MaxRadius;
            }
            set
            {
                m_MaxRadius = value;
                RaisePropertyChanged();
            }
        }

        private double m_Opacity;
        /// <summary>
        /// Прозрачность
        /// </summary>
        public double AOpacity
        {
            get
            {
                return m_Opacity;
            }
            set
            {
                m_Opacity = value;
                RaisePropertyChanged();
            }
        }
        #endregion Свойства для Bubble - серии
    }

    public class BubbleSeriesPropertiesCollection : Collection<BubbleSeriesProperties>
    {
        private object m_Owner = null;
        public object Owner
        {
            get
            {
                return m_Owner;
            }
            set
            {
                m_Owner = value;
            }
        }

        public BubbleSeriesPropertiesCollection()
            : base()
        {
        }

        //Событие - изменение коллекции
        public event EventHandler CollectionModified;

        public void RaiseCollectionModified()
        {
            EventHandler handler = CollectionModified;
            if (handler != null)
                handler(this, EventArgs.Empty);

        }
    }
}
